// 反糖 基本原理


function logged(value, context) {
    console.log(context, 'context')
    if (context.kind === 'method') { // 装饰的是一个方法
      return function(...args) {
        console.log('重写的逻辑', )
        // 使用 apply 来调用函数 同时指定 this 为调用函数时的对象
        const result = value.apply(this , args)
        return result
      }
    }
  }
  
  class C {
    sum(a, b) {
      console.log(this)
      return a + b
    }
  }
  
  C.prototype.sum = logged(C.prototype.sum, {
    kind: 'method',
    name: 'sum'
  }) ?? C.prototype.sum // 如果方法装饰器没有返回值则不需要重写

  console.log((new C()).sum(1,2))